home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / pmode / pmode251 / example2.asm < prev    next >
Assembly Source File  |  1994-02-04  |  4KB  |  102 lines

  1. ; This program demonstrates calling a protected mode procedure from real mode.
  2.  
  3.         .386p
  4. code16  segment para public use16
  5.         assume cs:code16, ds:code32
  6.  
  7. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  8. ; DATA
  9. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  10.  
  11. r_message       db      'Now we are in real mode',0dh,0ah,36
  12.  
  13. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  14. ; CODE
  15. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  16.  
  17. ;─────────────────────────────────────────────────────────────────────────────
  18. rm:
  19.         mov ax,code32                   ; need to address variables in CODE32
  20.         mov ds,ax                       ;  segment. All necessary variables
  21.                                         ;  are in the first 64k of the CODE32
  22.                                         ;  segment so they are accessible with
  23.                                         ;  the 16bit addressing that is done
  24.                                         ;  in real mode
  25.         mov eax,offset r_message        ; offset is from beginning of CODE16
  26.         add eax,ds:_code16a             ; adjust to absolute address
  27.         sub eax,ds:_code32a             ; convert to protected mode realative
  28.                                         ;  address
  29.         mov ds:v86r_edx,eax             ; this will become the EDX register on
  30.                                         ;  entry to the routine we are calling
  31.         mov edx,offset pm_rout          ; the routine in protected mode we
  32.                                         ;  want to call
  33.         int 32h                         ; call protected mode routine
  34.         retf
  35.  
  36. code16  ends
  37.  
  38. code32  segment para public use32
  39.         assume cs:code32, ds:code32
  40.  
  41. include pmode.inc
  42.  
  43. public  _main
  44.  
  45. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  46. ; DATA
  47. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  48.  
  49. p_message0      db      'We are in protected mode.',0dh,0ah,36
  50. p_message1      db      'We are now back in protected mode.',0dh,0ah,36
  51.  
  52. p_message_key   db      'Press any key to go on.',0dh,0ah,36
  53.  
  54. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  55. ; CODE
  56. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  57.  
  58. ;═════════════════════════════════════════════════════════════════════════════
  59. _main:
  60.         sti
  61.  
  62.         mov edx,offset p_message0
  63.         call pm_rout
  64.  
  65.         mov cx,code16           ; segment of real mode far call
  66.         mov dx,offset rm        ; offset of real mode far call
  67.         int 32h                 ; call real mode far routine
  68.  
  69.         mov edx,offset p_message1
  70.         call pm_rout
  71.  
  72.         jmp _exit
  73.  
  74. ;─────────────────────────────────────────────────────────────────────────────
  75. pm_rout:                        ; put message at EDX and wait for keypress
  76.         call pm_put_msg         ; put input message
  77.  
  78.         mov edx,offset p_message_key
  79.         call pm_put_msg         ; put 'press ny key...' message
  80.  
  81.         mov v86r_ah,0           ; use real mode INT 16h AH=0 to wait for key
  82.         mov al,16h
  83.         int 33h
  84.  
  85.         ret
  86.  
  87. ;─────────────────────────────────────────────────────────────────────────────
  88. pm_put_msg:                     ; put DOS string just line in EX_PM0.ASM
  89.         add edx,_code32a
  90.         shld eax,edx,28
  91.         and edx,0fh
  92.         mov v86r_ds,ax
  93.         mov v86r_dx,dx
  94.         mov v86r_ah,9
  95.         mov al,21h
  96.         int 33h
  97.         ret
  98.  
  99. code32  ends
  100.         end
  101.  
  102.